import type { AddressBook } from '../entity/AddressBook'
import Dish, { DishStatisticsInfo } from '../entity/Dish'
import type DishCategory from '../entity/DishCategory'
import type OrderActivity from '../entity/OrderActivity'
import { Page } from '../generic/Page'
import type { CouponCoreInfo } from './coupon'
import type { CartItemVO } from './shopping-cart'

/**
 * 商店展示商店统计
 *
 * @author zhuangjie
 * @date 2024/04/29
 */
export class ShopStatisticalForShopShow {
  /** 评分 */
  public score: number | null

  /** 评分人数 */
  public numberOfRatings: number | null

  /** 月售数量 */
  public monthlySoldQuantity: number | null
}
export class NearbyShop {
  public id: number
  public name: string
  public logo: string
  public notice: string
  public flags: string
  public deliveryMethod: number
  public minimumDeliveryAmount: number
  public deliveryFee: number
  public packingFee: number
  public dishList: Dish[]
  public distance: number
  public reputation: string
  public bookable: string

  public statistical: ShopStatisticalForShopShow
}

export class NearbyShopProduct extends Dish {
  shopInfo: NearbyShop
  dishStatisticsInfo: DishStatisticsInfo
}

export class ShopInfo {
  public id: number
  public longitude: number
  public latitude: number
  public shopCategoryId: number
  public name: string
  public phone: string
  public logo: string
  public backgroundPoster: string
  public notice: string
  public flags: string
  public reputation: string
  public businessType: string
  public deliveryMethod: number
  public accountStatus: number
  public businessStatus: number
  public minimumDeliveryAmount: number
  public packingFee: number
  public deliveryFee: number
  public dishCategoryList: DishCategory[]
  public isFollow: boolean = false
}

// export class ShopBusinessTime {
//   id: number // id编号
//   shopId: number // 店铺编号
//   beginTime: string // 营业时间段开始
//   endTime: string // 营业时间段结束
// }

/**
 * 店铺到用户的配送信息（用时）
 */
export class ShopToUserDeliveryInfo {
  shopId: number // 店铺id
  deliveryTime: number // 配送用时
}

export class CouponAvailable {
  /** 券批次id */
  public batchId: number

  /** 是否不可见，在展示有几个券可用的为true时计算在内 在选择券时如果真的有该类型的券，会让对应的券可用 */
  public isStealth: boolean
}

export interface ShopPreferentialLabelInfoVO {
  /** 活动 */
  activityLabels: string[][]

  /** 店铺券 */
  shopCouponList: CouponCoreInfo[]

  /** 平台券 */
  platformCouponList: CouponCoreInfo[]
}

export class PreferentialInfo {
  /** 活动优惠信息 */
  public availableActivityList: Array<OrderActivity>

  /** 活动优惠的总金额 */
  public activityDeductionAmount: number

  /** 优惠的配送费金额 */
  public deliveryFeeDeductionAmount: number

  /** 可使用的平台券数量（即使券相同） */
  public platformCouponCount: number

  /** 可使用的店铺券数量（即使券相同） */
  public shopCouponCount: number

  /** 可在本菜品订单中可使用的平台券批次 */
  public platformBatchIds: number[]

  /** 可在本菜品订单中可使用的店铺券批次 */
  public shopCouponBatchIds: number[]

  /** 传入要使用的所有店铺券优惠的金额 */
  public allShopCouponDeductionAmount: number

  /** 传入要使用的所有平台券可以优惠的金额 */
  public allPlatformCouponDeductionAmount: number

  /** 活动-优惠后的金额 */
  public activityAndCouponPreferentialAfterOrderAmount: number
}

export class OrderConfirmRequire {
  /** 收货地址信息 */
  public addressBook: AddressBook

  /** 购买的所有菜品和（未进行任何优惠的） */
  public dishListSumPrice: number

  /** 购物车商品信息 */
  public cartItemList: CartItemVO[]

  /** 店铺支持的receivingMethod */
  public supportedReceivingMethods: string[]

  /** 配送费（仅配送订单） */
  public deliveryFee: number

  /** 餐盒费（仅配送与自提订单） */
  public packingFee: number

  /** 优惠信息 */
  public preferentialInfo: PreferentialInfo
}

/**
商店表面信息vo
（如：收藏的店铺展示）
@author zhuangjie
@date 2024/05/05/
**/
export class ShopSurfaceInfo {
  /* 店铺id */
  public id: number
  /** 店铺名 */
  public name: string
  /** 店铺logo */
  public logo: string
  /** 店铺公告 */
  public notice: string
  /** 店铺标志 */
  public flags: string
  /** 配送方式 */
  public deliveryMethod: number
  /** 最小配送金额 */
  public minimumDeliveryAmount: number
  /** 打包费 */
  public packingFee: number
  /**预计需要的时间(分钟) */
  public expectedTime: number
  /** 距离 */
  public distance: number
  /** 店铺声誉 */
  public reputation: string
  /** 是否超出配送范围 */
  public isOutOfRange: boolean
  /** 可预订时间设置 */
  public bookable: string | null
  /** 优先展示的菜品列表 */
  public dishList: Dish[]
  /** 店铺展示统计信息 */
  public statistical: ShopStatisticalForShopShow
  /**
   * 店铺活动
   */
  public activityInstanceTitleForArrayList: string[][]
}
